{T}

程序员练级攻略:数据库-[2026重制版]

核心变更说明:本文基于2018年版全面升级,新增PostgreSQL 17新特性、MySQL 9.0 LTS更新、Redis 7.x数据结构、MongoDB 8.0引擎优化、时序数据库TimescaleDB、图数据库Neo4j 5.x、数据库选型决策树、分库分表最佳实践等2026年数据库核心技术内容。

对于数据库方向,重点就是两种数据库,一种是以SQL为代表的关系型数据库,另一种是以非SQL为代表的NoSQL数据库。**对于一个程序员,你可能觉得数据库的事都是DBA的事,然而我想告诉你你错了,这些事才真正是程序员的事。**因为程序是需要和数据打交道的,所以程序员或架构师不仅需要设计数据模型,还要保证整体系统的稳定性和可用性,数据是整个系统中关键中的关键。

🎯 数据库技术体系

图表渲染中…

📊 关系型数据库

PostgreSQL 17 vs MySQL 9.0 选型指南

图表渲染中…

PostgreSQL 17 核心特性(2024年发布)

特性说明使用场景
JSON Path 查询SQL/JSON标准支持半结构化数据
Logical Replication 改进更灵活的主从复制高可用架构
Parallel Vacuum并行清理死元组大表维护
PSQL 新命令\dconfig 显示配置运维便利
性能提升查询优化器改进通用
sql
-- PostgreSQL 17 JSON 示例
CREATE TABLE products (
    id SERIAL PRIMARY KEY,
    name TEXT,
    attributes JSONB
);
 
-- 插入JSON数据
INSERT INTO products (name, attributes)
VALUES ('iPhone', '{"color": "black", "storage": "256GB", "price": 999}');
 
-- JSONPath 查询 (PG 17)
SELECT name, attributes->>'color' as color,
       attributes->'price'::numeric as price
FROM products
WHERE attributes @> '{"storage": "256GB"}';
 
-- 创建GIN索引加速JSON查询
CREATE INDEX idx_products_attributes ON products USING GIN (attributes);

MySQL 9.0 LTS 新特性(2025年发布)

MySQL 9.0 是最新的LTS长期支持版本:

特性说明
JavaScript 存储过程可在MySQL内执行JS代码
EXPLAIN ANALYZE执行计划 + 实际执行统计
Vector 类型原生向量支持(AI应用)
Performance Schema 增强更细粒度的监控
Replication 改进延迟复制优化
sql
-- MySQL 9.0 JavaScript存储程序示例
CREATE FUNCTION js_add(a INT, b INT)
RETURNS INT
LANGUAGE JAVASCRIPT AS $$
    return a + b;
$$;
 
-- Vector 类型示例 (用于AI/ML)
CREATE TABLE embeddings (
    id INT PRIMARY KEY,
    content TEXT,
    embedding VECTOR(1536)  -- OpenAI维度
);
 
-- 向量相似度搜索
SELECT content, COSINE_DISTANCE(embedding, '[0.1,0.2,...]') as distance
FROM embeddings
ORDER BY distance
LIMIT 10;

索引设计最佳实践

索引是数据库性能优化的核心:

图表渲染中…

索引设计原则

  1. 选择性高的列优先:唯一性越高越好
  2. 遵循最左前缀原则:联合索引 (a,b,c) 可查 a, a,b, a,b,c
  3. 避免过度索引:每个索引都会增加写入开销
  4. 覆盖索引:查询字段都在索引中时无需回表
sql
-- 联合索引示例(订单系统)
CREATE INDEX idx_orders_user_status_time
ON orders(user_id, status, created_at);
 
-- 这个查询会命中索引
SELECT * FROM orders
WHERE user_id = 123 AND status = 'paid'
ORDER BY created_at DESC;
 
-- 但这个不会(缺少user_id)
SELECT * FROM orders WHERE status = 'paid';  -- 全表扫描!

🚀 NoSQL数据库

Redis 7.x 核心数据结构与应用场景

Redis是最流行的键值数据库,7.x版本带来了许多重要更新:

图表渲染中…

Redis 7.x 新特性

特性版本说明
Functions + Triggers7.0服务端脚本增强
ACL 细化权限7.0用户级别的命令权限控制
Sharding7.0集群分片改进
Multi-part Keys7.0大Key自动拆分
Commands Stats7.0命令级延迟监控
python
# Redis 7 Functions 示例(Lua脚本升级版)
# 注册一个函数
redis.execute_command('FUNCTION', 'LOAD', '#!lua name=mylib\n'
    'redis.register_function("myfunc", function(keys, args)\n'
    '    return redis.call("incr", keys[1])\n'
    'end)')
 
# 调用函数
result = redis.fcall("myfunc", 1, "mycounter")

MongoDB 8.0 核心改进

MongoDB 8.0 是最新稳定版本:

特性说明
Queryable Encryption字段级加密查询
Time Series Collections原生时序数据支持
Change Streams 改进更强的一致性保证
Sharded Clusters分片集群性能提升
$lookup 性能关联查询优化
javascript
// MongoDB 8.0 时序集合示例
db.createCollection(
    "temperature",
    {
        timeseries: {
            timeField: "timestamp",
            metaField: "sensorId",
            granularity: "hours"
        }
    }
);
 
// 自动按时间聚合
db.temperature.insertMany([
    { timestamp: new Date(), sensorId: "A", value: 25.3 },
    { timestamp: new Date(), sensorId: "B", value: 26.1 }
]);
 
// 时序查询(自动压缩)
db.temperature.aggregate([
    { $match: { sensorId: "A", timestamp: { $gte: ISODate("2024-01-01") } } },
    { $group: {
        _id: { $dateTrunc: { date: "$timestamp", unit: "day" } },
        avgValue: { $avg: "$value" }
    }}
]);

🏗️ 数据库高可用架构

主从复制 vs 读写分离

图表渲染中…

分库分表策略

什么时候需要分库分表?

指标单机上限需要拆分
单表行数~2000万行>2000万
单表大小~10GB>10GB
QPS~5000单表>5000
图表渲染中…

📈 各大公司数据库实践案例

推荐阅读的工程实践

公司文章/分享核心经验
UberWhy Uber Switched from Postgres to MySQLSchema迁移、兼容性考量
AirbnbScaling Financial Reporting分区策略演进
DiscordHow Discord Stores Billions of MessagesCassandra + ScyllaDB实践
PinterestSharding & IDs at InstagramSnowflake ID生成器
Booking.comEvolution of MySQL System DesignMySQL集群演化史

🔧 数据库选型决策树

图表渲染中…

📚 推荐学习资源

必读书籍

书名作者重点
《高性能MySQL》Baron Schwartz 等MySQL调优圣经
《Designing Data-Intensive Applications》Martin Kleppmann必读! 数据系统设计
《PostgreSQL Performance》Gregory SmithPG性能优化
《Redis实战》Josiah L. CarlsonRedis深入实践

在线资源

资源URL说明
MySQL官方手册https://dev.mysql.com/doc/权威参考
PostgreSQL Wikihttps://wiki.postgresql.org/社区知识库
Awesome MySQLhttps://shlomi-noach.github.io/awesome-mysql/工具/资源合集
Use The Index, Lukehttps://use-the-index-luke.com/索引教程

下一篇文章我们将探讨分布式架构入门——CAP理论、一致性模型、分布式系统设计的核心理论与实践。